package com.boss.salary.dao;

import com.boss.framework.dto.PaginationDTO;
import com.boss.salary.entity.PersonExt;
import com.boss.salary.entity.PersonInfo;
import com.boss.salary.vo.PersonInfoVO;
import com.boss.salary.vo.UnitSalaryReportVO;

import java.util.List;
import java.util.Map;

public interface IPersonInfoDao {

    /**
     * 分页查询 人员信息数据
     * @param paginationDTO
     * @return
     */
    List<PersonInfo> queryPersonInfoPage(PaginationDTO paginationDTO, Map<String, Object> queryParam);



    /**
     * 分页查询 工资是否停发
     * @param paginationDTO
     * @return
     */
    List<PersonInfo> queryStopPaySalaryPage(PaginationDTO paginationDTO, Map<String, Object> queryParam);

    /**
     * 获取人员信息表数据数量
     * @return
     */
    int queryPersonInfoTotal(Map<String, Object> queryParam);

    /**
     * 获取 工资是否停发数量
     * @return
     */
    int queryStopPaySalaryTotal(Map<String, Object> queryParam);

    /**
     * 增加 人员信息数据
     * @param personInfo
     * @return
     */
    void savePersonInfo(PersonInfo personInfo);

    /**
     * 更新 人员信息数据
     * @param personInfo
     * @return
     */
    void updatePersonInfo(PersonInfo personInfo);

    /**
     * 根据id删除人员信息数据
     * @param id
     * @return
     */
    void deletePersonInfo(String id);

    /**
     * 获取在职和离休人数
     * @return
     */
    Map<String, Object> getStateNum(Map<String, Object> queryParam);

    /**
     * 根据单位id批量获取人员信息
     * @param agencyIds
     * @return
     */
    List<PersonInfo> getPersonInfoByAgencyIds(String agencyIds);

    /**
     * 将人员信息批量插入到人员历史表
     * @param params
     */
    void batchSavePersonHistory(List<Object[]> params);

    /**
     * 删除人员历史表数据
     * @param month
     * @param agencyIds
     */
    void deletePersonHistory(String month, List<String> agencyIds);

    /**
     * 单位工资编报：查询需要发放工资人员总数
     * @return
     */
    UnitSalaryReportVO selectSendSalaryPersonTotal(String agencyId, String salaryType);

    /**
     * 单位工资编报：查询上报需要发放工资人员总数
     * @return
     */
    UnitSalaryReportVO selectSubmitSendSalaryPersonTotal(String agencyId,String isThirteen, String salaryType);

    /**
     * 批量更新操作表
     * @param params
     */
    void batchUpdateBank(List<Object[]> params);

    /**
     * 根据id获取名
     * @param id
     * @return
     */
    String getPersonInfoById(String id);

    /**
     * 导出查询本单位所有人
     * @param agencyId
     * @return
     */
    List<PersonInfo> getAllPersonInfo(String agencyId);

    /**
     *
     * @param personId
     * @return
     */
    PersonInfoVO selectOnePersonInfo(String personId);

    /**
     * 根据单位信息id
     * @param agencyid
     * @return
     */
    List<PersonExt> getIdAndMeritPayCodeByIdenNo(String agencyid);

    /**
     * 根据区划查找所有身份证号
     * @returnv
     */
    List<String> getIdenNos(String province);


    /**
     * 根据人员id物理删除人员基本信息
     * @param personId
     */
    void physicalDeleteByPersonId(String personId);


    List<PersonExt> getPersonExtByHistory(String month, List<String> agencyIds);


}
